home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -in_the_mag- / basics / amos / multiwindows.lha / MultiWindows / Agads21.amos / Agads21.amosSourceCode
AMOS Source Code  |  1999-01-04  |  44KB  |  1,565 lines

  1. Set Buffer 40
  2.  
  3. GADCOUNT=10 : Set Dir 60
  4. Dim GADINFO(GADCOUNT,4),GADTEXT$(GADCOUNT),GADSTUFF(GADCOUNT,6)
  5. Dim FILELIST$(300),GADRADIO(GADCOUNT),GADSTORE(10,11),STORETEXT$(10)
  6. Global GADINFO(),GADCOUNT,GADTEXT$(),GADSTUFF(),FILELIST$(),FILEDIR$,GADRADIO(),GADSTORE(),STORETEXT$()
  7. Global VBLACK,VWHITE,VGREY,VBLUE
  8. '  
  9. '
  10. '
  11. '
  12. '  
  13. Screen Open 0,640,200,8,Hires : Flash Off : Cls 2 : Palette $0,$FFF,$AAA,$68B
  14. GAD_SETCOLOURS[0,1,2,3]
  15. '
  16. 'GAD_FILE_SELECTOR[100,30,50,"Filer2.1!"] : End  
  17. '  
  18. GAD_HSLIDER_CREATE[1,10,10,200,12,400,50]
  19. GAD_HSLIDER_UPDATE[1,19]
  20.  
  21. Do 
  22.    Proc GADSCAN : GADG=Param
  23.    
  24.    If GADG=1
  25.       Repeat : GAD_HSLIDER_MOUSE_UPDATE[1]
  26.          Print At(0,0);Param;"  "
  27.       Until Mouse Key=0
  28.    End If 
  29. Loop 
  30. '
  31. '
  32. '
  33. '
  34. Procedure GAD_SETCOLOURS[VBLACK,VWHITE,VGREY,VBLUE]
  35. 'hello!
  36. End Proc
  37. Procedure GADTYPE[GADNUM]
  38.    TYPE=GADINFO(GADNUM,0)
  39. End Proc[TYPE]
  40. '
  41. Procedure GADSCAN
  42.    If Mouse Key<>0
  43.       XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  44.       For N=1 To GADCOUNT
  45.          If XM=>GADINFO(N,1) and XM<=GADINFO(N,3) and YM=>GADINFO(N,2) and YM<=GADINFO(N,4)
  46.             GADRETURN=N
  47.          End If 
  48.       Next N
  49.       If GADRETURN=0 : Repeat : Until Mouse Key=0 : End If 
  50.    End If 
  51.    '
  52.    If GADINFO(GADRETURN,0)=1 or GADINFO(GADRETURN,0)=7
  53.       GTEM=GADRETURN
  54.       Do 
  55.          XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  56.          If XM<GADINFO(GTEM,1) or XM>GADINFO(GTEM,3) or YM<GADINFO(GTEM,2) or YM>GADINFO(GTEM,4)
  57.             If T=1
  58.                If GADINFO(GTEM,0)=1 : GAD_BUTTON_OUT[GTEM] : GADRETURN=0 : End If 
  59.                If GADINFO(GTEM,0)=7 : GAD_CYCLE_OUT[GTEM] : GADRETURN=0 : End If 
  60.                If GADINFO(GTEM,0)=20 : GAD_SBUT_OUT[GTEM] : GADRETURN=0 : End If 
  61.             T=0 : End If 
  62.          Else 
  63.             If T=0
  64.                If GADINFO(GTEM,0)=1 : GAD_BUTTON_IN[GTEM] : GADRETURN=GTEM : End If 
  65.                If GADINFO(GTEM,0)=7 : GAD_CYCLE_IN[GTEM] : GADRETURN=GTEM : End If 
  66.                If GADINFO(GTEM,0)=20 : GAD_SBUT_IN[GTEM] : GADRETURN=GTEM : End If 
  67.             T=1 : End If 
  68.          End If 
  69.          Exit If Mouse Key=0
  70.       Loop 
  71.       If GADRETURN>0
  72.          If GADINFO(GADRETURN,0)=1 : GAD_BUTTON_OUT[GADRETURN] : End If 
  73.          If GADINFO(GADRETURN,0)=7 : GAD_CYCLE_OUT[GADRETURN] : End If 
  74.          If GADINFO(GADRETURN,0)=20 : GAD_SBUT_OUT[GADRETURN] : End If 
  75.       End If 
  76.    End If 
  77.    '  
  78. End Proc[GADRETURN]
  79. '
  80. Procedure GAD_RAISEBOX_CREATE[X,Y,WIDTH,HEIGHT,STYLE]
  81.    '
  82.    If STYLE=2 or STYLE=4 Then Ink VGREY : Bar X+1,Y+1 To X+WIDTH-1,Y+HEIGHT-1
  83.    Set Pattern 0
  84.    '
  85.    If STYLE<3
  86.       Ink VWHITE : Polyline X+WIDTH,Y To X,Y To X,Y+HEIGHT
  87.       Ink VBLACK : Polyline X+WIDTH,Y+1 To X+WIDTH,Y+HEIGHT To X+1,Y+HEIGHT
  88.    Else 
  89.       Ink VWHITE : Polyline X+WIDTH,Y To X,Y To X,Y+HEIGHT
  90.       Polyline X+1,Y+1 To X+1,Y+HEIGHT-1
  91.       Ink VBLACK : Polyline X+WIDTH,Y To X+WIDTH,Y+HEIGHT To X+1,Y+HEIGHT
  92.       Polyline X+WIDTH-1,Y+1 To X+WIDTH-1,Y+HEIGHT-1
  93.    End If 
  94.    '
  95. End Proc
  96. Procedure GAD_LOWERBOX_CREATE[X,Y,WIDTH,HEIGHT,STYLE]
  97.    '
  98.    If STYLE=2 or STYLE=4 Then Ink VBLUE : Bar X+1,Y+1 To X+WIDTH-1,Y+HEIGHT-1
  99.    Set Pattern 0
  100.    '
  101.    If STYLE<3
  102.       Ink VBLACK : Polyline X+WIDTH,Y To X,Y To X,Y+HEIGHT
  103.       Ink VWHITE : Polyline X+WIDTH,Y+1 To X+WIDTH,Y+HEIGHT To X+1,Y+HEIGHT
  104.    Else 
  105.       Ink VBLACK : Polyline X+WIDTH,Y To X,Y To X,Y+HEIGHT
  106.       Polyline X+1,Y+1 To X+1,Y+HEIGHT-1
  107.       Ink VWHITE : Polyline X+WIDTH,Y To X+WIDTH,Y+HEIGHT To X+1,Y+HEIGHT
  108.       Polyline X+WIDTH-1,Y+1 To X+WIDTH-1,Y+HEIGHT-1
  109.    End If 
  110. End Proc
  111. '
  112. Procedure GAD_BUTTON_CREATE[GADNUM,X,Y,HEIGHT,NAME$]
  113.    '
  114.    If NAME$="" Then NAME$=" "
  115.    GADTEXT$(GADNUM)=NAME$
  116.    '
  117.    GADINFO(GADNUM,0)=1
  118.    GADINFO(GADNUM,1)=X
  119.    GADINFO(GADNUM,2)=Y
  120.    GADINFO(GADNUM,3)=X+(Len(NAME$)*8)+7
  121.    GADINFO(GADNUM,4)=Y+HEIGHT
  122.    '
  123.    GAD_RAISEBOX_CREATE[X,Y,7+Len(NAME$)*8,HEIGHT,4]
  124.    Ink VBLACK,VGREY : Text X+4,Y+(HEIGHT/2)+3,NAME$
  125. End Proc
  126. Procedure GAD_BUTTON_IN[GADNUM]
  127.    '
  128.    NAME$=GADTEXT$(GADNUM)
  129.    '
  130.    X=GADINFO(GADNUM,1)
  131.    Y=GADINFO(GADNUM,2)
  132.    WIDTH=GADINFO(GADNUM,3)-X
  133.    HEIGHT=GADINFO(GADNUM,4)-Y
  134.    '
  135.    GAD_LOWERBOX_CREATE[X,Y,WIDTH,HEIGHT,4]
  136.    '
  137.    Ink VBLACK,VBLUE : Text X+4,Y+(HEIGHT/2)+3,NAME$
  138.    '
  139. End Proc
  140. Procedure GAD_BUTTON_OUT[GADNUM]
  141.    '
  142.    NAME$=GADTEXT$(GADNUM)
  143.    '
  144.    X=GADINFO(GADNUM,1)
  145.    Y=GADINFO(GADNUM,2)
  146.    WIDTH=GADINFO(GADNUM,3)-X
  147.    HEIGHT=GADINFO(GADNUM,4)-Y
  148.    '
  149.    GAD_RAISEBOX_CREATE[X,Y,WIDTH,HEIGHT,4]
  150.    '
  151.    Ink VBLACK,VGREY : Text X+4,Y+(HEIGHT/2)+3,NAME$
  152.    '
  153. End Proc
  154. '
  155. Procedure GAD_TEXT_CREATE[GADNUM,X1,Y1,VSIZE,VTEXT$,VTYPE]
  156.    X2=VSIZE*8+X1+7
  157.    Y2=Y1+12
  158.    Ink VGREY : Bar X1,Y1 To X2,Y2
  159.    GADINFO(GADNUM,0)=5
  160.    GADINFO(GADNUM,1)=X1
  161.    GADINFO(GADNUM,2)=Y1
  162.    GADINFO(GADNUM,3)=X2
  163.    GADINFO(GADNUM,4)=Y2
  164.    GADSTUFF(GADNUM,0)=VSIZE
  165.    GADSTUFF(GADNUM,1)=VTYPE
  166.    GADTEXT$(GADNUM)=VTEXT$
  167.    Rem draw the top 
  168.    Ink VWHITE
  169.    Draw X1,Y1 To X2-1,Y1
  170.    Ink VBLACK
  171.    Draw X1+2,Y1+1 To X2-3,Y1+1
  172.    Rem draw right side
  173.    Ink VWHITE
  174.    Draw X1,Y1 To X1,Y2
  175.    Draw X1+1,Y1 To X1+1,Y2-1
  176.    Ink VBLACK
  177.    Draw X1+2,Y1+1 To X1+2,Y2
  178.    Draw X1+3,Y1+1 To X1+3,Y2-2
  179.    Rem draw bottom
  180.    Draw X1+1,Y2 To X2,Y2
  181.    Ink VWHITE
  182.    Draw X1+3,Y2-1 To X2-2,Y2-1
  183.    Rem draw left side 
  184.    Draw X2-2,Y1 To X2-2,Y2-1
  185.    Draw X2-3,Y1+2 To X2-3,Y2-1
  186.    Ink VBLACK
  187.    Draw X2-1,Y1+1 To X2-1,Y2
  188.    Draw X2,Y1 To X2,Y2
  189.    GAD_TEXT_SET[GADNUM,VTEXT$,1,0]
  190. End Proc
  191. Procedure GAD_TEXT_SET[GADNUM,VTEXT$,VSCREENPOS,VCURPOS]
  192.    X1=GADINFO(GADNUM,1) : Y1=GADINFO(GADNUM,2)
  193.    VSCREENSIZE=GADSTUFF(GADNUM,0)
  194.    GADTEXT$(GADNUM)=VTEXT$
  195.    VTEXT$=VTEXT$+" "
  196.    VTEXT$=Mid$(VTEXT$,VSCREENPOS,Min(VSCREENSIZE,Len(VTEXT$)-VSCREENPOS+1))
  197.    Ink VBLACK,VGREY
  198.    Text X1+4,Y1+9,VTEXT$+Space$(VSCREENSIZE-Len(VTEXT$))
  199.    VCURTEXT$=Mid$(VTEXT$,VCURPOS,1)
  200.    If VCURPOS<>0
  201.       Ink VWHITE,VBLUE
  202.       Text X1+4+8*(VCURPOS-1),Y1+9,VCURTEXT$
  203.    End If 
  204. End Proc
  205. Procedure GAD_TEXT_INPUT[GADNUM]
  206.    Clear Key 
  207.    XPOS=GADINFO(GADNUM,1)
  208.    VFIELD$=GADTEXT$(GADNUM)
  209.    VSCREENSIZE=GADSTUFF(GADNUM,0)
  210.    VTYPE=GADSTUFF(GADNUM,1)
  211.    VSCREENPOS=1
  212.    TX1=GADINFO(GADNUM,1)
  213.    TY1=GADINFO(GADNUM,2)
  214.    TX2=GADINFO(GADNUM,3)
  215.    TY2=GADINFO(GADNUM,4)
  216.    '
  217.    VMOUSEPOS=(X Screen(X Mouse)+4-XPOS)/8
  218.    If VMOUSEPOS>VSCREENSIZE Then VMOUSEPOS=VSCREENSIZE
  219.    If VMOUSEPOS<1 Then VMOUSEPOS=1
  220.    If VSCREENPOS+VMOUSEPOS>Len(VFIELD$)+1 Then VMOUSEPOS=Len(VFIELD$)+1
  221.    VCURPOS=VMOUSEPOS
  222.    GAD_TEXT_SET[GADNUM,VFIELD$,1,VCURPOS]
  223.    '
  224.    Do 
  225.       IN$=Inkey$ : SCAN=Scancode
  226.       XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  227.       '
  228.       '** Right arrow
  229.       If SCAN=78 or ADVANCE=1
  230.          If VCURPOS+VSCREENPOS<=Len(VFIELD$)+1
  231.             If VCURPOS<VSCREENSIZE
  232.                Inc VCURPOS
  233.             Else 
  234.                Inc VSCREENPOS
  235.             End If 
  236.          End If 
  237.          If ADVANCE=1 : ADVANCE=0 : End If 
  238.          GAD_TEXT_SET[GADNUM,VFIELD$,VSCREENPOS,VCURPOS]
  239.       End If 
  240.       '
  241.       '** Left arrow 
  242.       If SCAN=79 or RETREAT=1
  243.          If VCURPOS+VSCREENPOS>2
  244.             If VCURPOS>1
  245.                Dec VCURPOS
  246.             Else 
  247.                Dec VSCREENPOS
  248.             End If 
  249.          End If 
  250.          If RETREAT=1 : RETREAT=0 : End If 
  251.          GAD_TEXT_SET[GADNUM,VFIELD$,VSCREENPOS,VCURPOS]
  252.       End If 
  253.       '
  254.       '** Text input 
  255.       If VTYPE=0
  256.          If Asc(IN$)>31 and Asc(IN$)<127
  257.             VFIELDTEMP$=Left$(VFIELD$,VSCREENPOS+VCURPOS-2)+IN$+Right$(VFIELD$,Len(VFIELD$)-(VSCREENPOS+VCURPOS-2))
  258.             VFIELD$=VFIELDTEMP$
  259.             ADVANCE=1
  260.          End If 
  261.       Else 
  262.          If Asc(IN$)>47 and Asc(IN$)<58 or Asc(IN$)=46
  263.             VFIELDTEMP$=Left$(VFIELD$,VSCREENPOS+VCURPOS-2)+IN$+Right$(VFIELD$,Len(VFIELD$)-(VSCREENPOS+VCURPOS-2))
  264.             VFIELD$=VFIELDTEMP$
  265.             ADVANCE=1
  266.          End If 
  267.       End If 
  268.       '
  269.       '** Backspace
  270.       If SCAN=65 and VCURPOS+VSCREENPOS>2
  271.          VFIELDTEMP$=Left$(VFIELD$,VSCREENPOS+VCURPOS-3)+Right$(VFIELD$,Len(VFIELD$)-(VSCREENPOS+VCURPOS-2))
  272.          VFIELD$=VFIELDTEMP$
  273.       If VSCREENPOS=1 : RETREAT=1 : Else Dec VSCREENPOS : GAD_TEXT_SET[GADNUM,VFIELD$,VSCREENPOS,VCURPOS] : End If 
  274.       End If 
  275.       '
  276.       '** Delete 
  277.       If SCAN=70 and VCURPOS+VSCREENPOS<=Len(VFIELD$)+1
  278.          VFIELDTEMP$=Left$(VFIELD$,VSCREENPOS+VCURPOS-2)+Right$(VFIELD$,Len(VFIELD$)-(VSCREENPOS+VCURPOS-3)-2)
  279.          VFIELD$=VFIELDTEMP$
  280.          GAD_TEXT_SET[GADNUM,VFIELD$,VSCREENPOS,VCURPOS]
  281.          '
  282.       End If 
  283.       '
  284.       '** Mouse clicking 
  285.       Exit If SCAN=68 or SCAN=94 or SCAN=74
  286.       If Mouse Key=1
  287.          If XM<TX1 or YM<TY1 or XM>TX2 or YM>TY2 : Exit : End If 
  288.          If XM>TX1 or YM>TY1 or XM<TX2 or YM<TY2
  289.             VMOUSEPOS=(X Screen(X Mouse)+4-XPOS)/8
  290.             If VMOUSEPOS>VSCREENSIZE : VMOUSEPOS=VSCREENSIZE : End If 
  291.             If VMOUSEPOS<1 : VMOUSEPOS=1 : End If 
  292.             If VSCREENPOS+VMOUSEPOS>Len(VFIELD$)+1 : VMOUSEPOS=(Len(VFIELD$)+1)-(VSCREENPOS-1) : End If 
  293.             VCURPOS=VMOUSEPOS
  294.             GAD_TEXT_SET[GADNUM,VFIELD$,VSCREENPOS,VCURPOS]
  295.             Repeat : Until Mouse Key=0
  296.          End If 
  297.       End If 
  298.    Loop 
  299.    GAD_TEXT_SET[GADNUM,VFIELD$,1,0]
  300. End Proc[VFIELD$]
  301. Procedure GAD_TEXT_GET[GADNUM]
  302.    VTEXT$=GADTEXT$(GADNUM)
  303. End Proc[VTEXT$]
  304. Procedure GAD_TEXT_NEXT[GADNUM]
  305.    VNEXTSTRINGGAD=GADNUM
  306.    Do 
  307.       Add VNEXTSTRINGGAD,1,1 To GADCOUNT
  308.       GADTYPE[VNEXTSTRINGGAD]
  309.       VTYPE=Param
  310.       Exit If VTYPE=5
  311.    Loop 
  312. End Proc[VNEXTSTRINGGAD]
  313. Procedure GAD_TEXT_PREV[GADNUM]
  314.    VPREVSTRINGGAD=GADNUM
  315.    Do 
  316.       Add VPREVSTRINGGAD,-1,1 To GADCOUNT
  317.       GADTYPE[VPREVSTRINGGAD]
  318.       VTYPE=Param
  319.       Exit If VTYPE=5
  320.    Loop 
  321. End Proc[VPREVSTRINGGAD]
  322. '
  323. Procedure GAD_CYCLE_CREATE[GADNUM,X1,Y1,VLENGTH,VSTRING$]
  324.    X2=X1+25+VLENGTH*8
  325.    Y2=Y1+12
  326.    Ink VGREY : Bar X1,Y1 To X2,Y2
  327.    Rem ***** draw the outline 
  328.    Add X1,1
  329.    Ink VWHITE,VGREY
  330.    Draw X1,Y1 To X2+1,Y1
  331.    Draw X1,Y1 To X1,Y2
  332.    Draw X1-1,Y1 To X1-1,Y2
  333.    Ink VBLACK
  334.    Draw X1,Y2 To X2,Y2
  335.    Draw X2,Y1+1 To X2,Y2
  336.    Draw X2+1,Y1 To X2+1,Y2
  337.    Rem ***** draw the arrow 
  338.    Ink VWHITE
  339.    Draw X1+20,Y1+2 To X1+20,Y2-2
  340.    Ink VBLACK
  341.    Draw X1+19,Y1+2 To X1+19,Y2-2
  342.    Draw X1+6,Y1+2 To X1+13,Y1+2
  343.    Bar X1+13,Y1+3 To X1+14,Y1+6
  344.    Draw X1+11,Y1+4 To X1+16,Y1+4
  345.    Draw X1+12,Y1+5 To X1+15,Y1+5
  346.    Bar X1+5,Y1+3 To X1+6,Y2-3
  347.    Draw X1+6,Y2-2 To X1+13,Y2-2
  348.    Draw X1+13,Y2-3 To X1+14,Y2-3
  349.    GADINFO(GADNUM,0)=7
  350.    GADINFO(GADNUM,1)=X1
  351.    GADINFO(GADNUM,2)=Y1
  352.    GADINFO(GADNUM,3)=X2
  353.    GADINFO(GADNUM,4)=Y2
  354.    GADTEXT$(GADNUM)=""
  355.    GADSTUFF(GADNUM,0)=VLENGTH
  356.    GADSTUFF(GADNUM,1)=1
  357.    GAD_CYCLE_ADDITEM[GADNUM,VSTRING$]
  358.    GAD_CYCLE_SET[GADNUM,1]
  359. End Proc
  360. Procedure GAD_CYCLE_PUSH[GADNUM]
  361.    X1=GADINFO(GADNUM,1)
  362.    Y1=GADINFO(GADNUM,2)
  363.    X2=GADINFO(GADNUM,3)
  364.    Y2=GADINFO(GADNUM,4)
  365.    VLENGTH=GADSTUFF(GADNUM,0)
  366.    VITEM=GADSTUFF(GADNUM,1)
  367.    VSTRING$=GADTEXT$(GADNUM)
  368.    VITEMS=Len(VSTRING$)/VLENGTH
  369.    '
  370.    Add VITEM,1,1 To VITEMS
  371.    GAD_CYCLE_SET[GADNUM,VITEM]
  372.    '
  373. End Proc
  374. Procedure GAD_CYCLE_IN[GADNUM]
  375.    X1=GADINFO(GADNUM,1)
  376.    Y1=GADINFO(GADNUM,2)
  377.    X2=GADINFO(GADNUM,3)
  378.    Y2=GADINFO(GADNUM,4)
  379.    VLENGTH=GADSTUFF(GADNUM,0)
  380.    VITEM=GADSTUFF(GADNUM,1)
  381.    VSTRING$=GADTEXT$(GADNUM)
  382.    VITEMS=Len(VSTRING$)/VLENGTH
  383.    '
  384.    Rem ***** Push the control in
  385.    Ink VBLUE
  386.    Bar X1,Y1 To X2,Y2
  387.    Ink VBLACK,VBLUE
  388.    GAD_CYCLE_SET[GADNUM,VITEM]
  389.    Draw X1,Y1 To X2+1,Y1
  390.    Draw X1,Y1 To X1,Y2
  391.    Draw X1-1,Y1 To X1-1,Y2
  392.    Ink VWHITE,VGREY
  393.    Draw X1,Y2 To X2,Y2
  394.    Draw X2,Y1+1 To X2,Y2
  395.    Draw X2+1,Y1 To X2+1,Y2
  396.    '
  397.    Rem ***** draw the arrow 
  398.    Ink VWHITE
  399.    Draw X1+19,Y1+2 To X1+19,Y2-2
  400.    Ink VBLACK
  401.    Draw X1+20,Y1+2 To X1+20,Y2-2
  402.    Draw X1+6,Y1+2 To X1+13,Y1+2
  403.    Bar X1+13,Y1+3 To X1+14,Y1+6
  404.    Draw X1+11,Y1+4 To X1+16,Y1+4
  405.    Draw X1+12,Y1+5 To X1+15,Y1+5
  406.    Bar X1+5,Y1+3 To X1+6,Y2-3
  407.    Draw X1+6,Y2-2 To X1+13,Y2-2
  408.    Draw X1+13,Y2-3 To X1+14,Y2-3
  409.    '
  410. End Proc
  411. Procedure GAD_CYCLE_OUT[GADNUM]
  412.    X1=GADINFO(GADNUM,1)
  413.    Y1=GADINFO(GADNUM,2)
  414.    X2=GADINFO(GADNUM,3)
  415.    Y2=GADINFO(GADNUM,4)
  416.    VLENGTH=GADSTUFF(GADNUM,0)
  417.    VITEM=GADSTUFF(GADNUM,1)
  418.    VSTRING$=GADTEXT$(GADNUM)
  419.    VITEMS=Len(VSTRING$)/VLENGTH
  420.    '
  421.    Ink VGREY
  422.    Bar X1,Y1 To X2,Y2
  423.    Ink VWHITE
  424.    Draw X1,Y1 To X2+1,Y1
  425.    Draw X1,Y1 To X1,Y2
  426.    Draw X1-1,Y1 To X1-1,Y2
  427.    Ink VBLACK
  428.    Draw X1,Y2 To X2,Y2
  429.    Draw X2,Y1+1 To X2,Y2
  430.    Draw X2+1,Y1 To X2+1,Y2
  431.    '
  432.    Rem ***** draw the arrow 
  433.    Ink VWHITE
  434.    Draw X1+20,Y1+2 To X1+20,Y2-2
  435.    Ink VBLACK
  436.    Draw X1+19,Y1+2 To X1+19,Y2-2
  437.    Draw X1+6,Y1+2 To X1+13,Y1+2
  438.    Bar X1+13,Y1+3 To X1+14,Y1+6
  439.    Draw X1+11,Y1+4 To X1+16,Y1+4
  440.    Draw X1+12,Y1+5 To X1+15,Y1+5
  441.    Bar X1+5,Y1+3 To X1+6,Y2-3
  442.    Draw X1+6,Y2-2 To X1+13,Y2-2
  443.    Draw X1+13,Y2-3 To X1+14,Y2-3
  444.    '
  445.    GAD_CYCLE_SET[GADNUM,VITEM]
  446.    '
  447. End Proc[VITEM]
  448. Procedure GAD_CYCLE_SET[GADNUM,VITEM]
  449.    X1=GADINFO(GADNUM,1)
  450.    Y1=GADINFO(GADNUM,2)
  451.    VLENGTH=GADSTUFF(GADNUM,0)
  452.    VSTARTPOS=(VITEM-1)*VLENGTH
  453.    If VITEM>1 : Inc VSTARTPOS : End If 
  454.    VSTRING$=Mid$(GADTEXT$(GADNUM),VSTARTPOS,VLENGTH)
  455.    Ink VBLACK
  456.    Text X1+23,Y1+9,VSTRING$
  457.    GADSTUFF(GADNUM,1)=VITEM
  458. End Proc[VITEM]
  459. Procedure GAD_CYCLE_GET[GADNUM]
  460.    VGETID=GADSTUFF(GADNUM,1)
  461. End Proc[VGETID]
  462. Procedure GAD_CYCLE_ADDITEM[GADNUM,VSTRING$]
  463.    VOLDSTRING$=GADTEXT$(GADNUM)
  464.    VLENGTH=GADSTUFF(GADNUM,0)
  465.    If Len(VSTRING$)>VLENGTH
  466.       VSTRING$=Left$(VSTRING$,VLENGTH)
  467.    End If 
  468.    VSTRING$=VSTRING$+Space$(VLENGTH-Len(VSTRING$))
  469.    VNEWSTRING$=VOLDSTRING$+VSTRING$
  470.    GADTEXT$(GADNUM)=VNEWSTRING$
  471. End Proc
  472. Procedure GAD_CYCLE_GETTEXT[GADNUM]
  473.    VITEM=GADSTUFF(GADNUM,1)
  474.    VLENGTH=GADSTUFF(GADNUM,0)
  475.    VSTARTPOS=(VITEM-1)*VLENGTH
  476.    If VITEM>1 : Inc VSTARTPOS : End If 
  477.    VSTRING$=Mid$(GADTEXT$(GADNUM),VSTARTPOS,VLENGTH)
  478. End Proc[VSTRING$]
  479. '
  480. Procedure GAD_DISPLAY_CREATE[GADNUM,X1,Y1,VLENGTH,VTEXT$]
  481.    X2=X1+VLENGTH*8+7
  482.    Y2=Y1+12
  483.    Ink VGREY : Bar X1,Y1 To X2,Y2
  484.    VTEXTPRINT$=Left$(VTEXT$,Min(VLENGTH,Len(VTEXT$)))
  485.    Rem ***** draw the gadget
  486.    Ink VBLACK
  487.    Draw X1,Y1 To X2-1,Y1
  488.    Bar X1,Y1 To X1+1,Y2-1
  489.    Plot X1,Y2
  490.    Ink VWHITE
  491.    Draw X1+1,Y2 To X2,Y2
  492.    Bar X2-1,Y1+1 To X2,Y2
  493.    Plot X2,Y1
  494.    Rem ***** fill in the text 
  495.    Ink VBLACK,VGREY
  496.    Text X1+4,Y1+9,VTEXTPRINT$
  497.    GADINFO(GADNUM,0)=6
  498.    GADINFO(GADNUM,1)=X1
  499.    GADINFO(GADNUM,2)=Y1
  500.    GADINFO(GADNUM,3)=X2
  501.    GADINFO(GADNUM,4)=Y2
  502.    GADSTUFF(GADNUM,0)=VLENGTH
  503.    GADTEXT$(GADNUM)=VTEXT$
  504. End Proc
  505. Procedure GAD_DISPLAY_SET[GADNUM,VTEXT$]
  506.    X1=GADINFO(GADNUM,1)
  507.    Y1=GADINFO(GADNUM,2)
  508.    X2=GADINFO(GADNUM,3)
  509.    Y2=GADINFO(GADNUM,4)
  510.    VDISPLAYLEN=GADSTUFF(GADNUM,0)
  511.    Rem ***** clear the display
  512.    Ink VGREY
  513.    Bar X1+2,Y1+1 To X2-2,Y2-1
  514.    VTEXTDISPLAY$=Left$(VTEXT$,Min(VDISPLAYLEN,Len(VTEXT$)))
  515.    Ink VBLACK,VGREY
  516.    Text X1+4,Y1+9,VTEXTDISPLAY$
  517.    GADTEXT$(GADNUM)=VTEXT$
  518. End Proc
  519. Procedure GAD_DISPLAY_GET[GADNUM]
  520.    GADTEXT$=GADTEXT$(GADNUM)
  521. End Proc[GADTEXT$]
  522. '
  523. Procedure GAD_CHECKBOX_CREATE[GADNUM,X,Y]
  524.    '
  525.    GADINFO(GADNUM,1)=X
  526.    GADINFO(GADNUM,2)=Y
  527.    GADINFO(GADNUM,3)=X+25
  528.    GADINFO(GADNUM,4)=Y+10
  529.    GADSTUFF(GADNUM,1)=0
  530.    '
  531.    '
  532.    Ink VGREY
  533.    Bar X,Y To X+25,Y+10
  534.    '
  535.    Ink VBLACK
  536.    Draw X+25,Y To X+25,Y+10
  537.    Draw X+25,Y+10 To X,Y+10
  538.    Draw X+24,Y+1 To X+24,Y+10
  539.    Ink VWHITE
  540.    Draw X,Y To X+24,Y
  541.    Draw X,Y To X,Y+10
  542.    Draw X+1,Y To X+1,Y+9
  543.    '
  544. End Proc
  545. Procedure GAD_CHECKBOX_TICK[GADNUM]
  546.    X=GADINFO(GADNUM,1)
  547.    Y=GADINFO(GADNUM,2)
  548.    TICK=GADSTUFF(GADNUM,1)
  549.    '
  550.    '
  551.    Restore HELLO
  552.    If TICK=1 Then F=VGREY : NUMB=0 : Else F=VBLACK : NUMB=1
  553.    For N=1 To 7
  554.       For T=1 To 14
  555.          Read A : If A=1 Then Plot T+X+6,N+Y+1,F
  556.       Next T
  557.    Next N
  558.    '
  559.    HELLO:
  560.    Data 0,0,0,0,0,0,0,0,0,0,1,1,1,0
  561.    Data 0,0,0,0,0,0,0,0,0,1,1,0,0,0
  562.    Data 0,0,0,0,0,0,0,0,1,1,0,0,0,0
  563.    Data 1,1,1,0,0,0,0,1,1,0,0,0,0,0
  564.    Data 0,1,1,1,0,0,1,1,0,0,0,0,0,0
  565.    Data 0,0,1,1,1,1,1,0,0,0,0,0,0,0
  566.    Data 0,0,0,1,1,1,0,0,0,0,0,0,0,0
  567.    '
  568.    If NUMB=1 Then GADSTUFF(GADNUM,1)=1 Else GADSTUFF(GADNUM,1)=0
  569.    '
  570.    Do : If Mouse Key<>0 Then Loop 
  571. End Proc[NUMB]
  572. '
  573. '** New low-latency sliders, with integral buttons!
  574. Procedure GAD_SLIDER_CREATE[GADNUM,X,Y,XSIZ,YSIZ,NUMSTEPS,PAGESIZE]
  575.  
  576.    If NUMSTEPS<1 : NUMSTEPS=1 : PAGESIZE=1 : End If 
  577.    If PAGESIZE>NUMSTEPS : PAGESIZE=NUMSTEPS : End If 
  578.    
  579.    GADINFO(GADNUM,0)=12
  580.    GADINFO(GADNUM,1)=X
  581.    GADINFO(GADNUM,2)=Y+1
  582.    GADINFO(GADNUM,3)=X+XSIZ-1
  583.    GADINFO(GADNUM,4)=Y+YSIZ-2
  584.    '
  585.    GADSTUFF(GADNUM,1)=NUMSTEPS-PAGESIZE+1
  586.    GADSTUFF(GADNUM,2)=PAGESIZE
  587.    
  588.    GADRADIO(GADNUM)=0
  589.    
  590.    PADDLESIZE=(PAGESIZE*(YSIZ-2))/NUMSTEPS
  591.    If PADDLESIZE<6 : PADDLESIZE=6 : End If 
  592.    GADSTUFF(GADNUM,3)=PADDLESIZE
  593.    
  594.    AREA=YSIZ-2-PADDLESIZE
  595.    GADSTUFF(GADNUM,4)=AREA
  596.    '
  597.    GADSTUFF(GADNUM,5)=0
  598.    Ink VBLACK,VBLUE : Set Pattern 2
  599.    Bar X,Y To X+XSIZ-1,Y+YSIZ-1 : Set Pattern 0
  600.    
  601.    '   GAD_LOWERBOX_CREATE[X,Y,XSIZ,YSIZ,1] 
  602.    Ink VBLACK : Polyline X+XSIZ-1,Y To X,Y To X,Y+YSIZ-1
  603.    Ink VWHITE : Polyline X+XSIZ-1,Y+1 To X+XSIZ-1,Y+YSIZ-1 To X+1,Y+YSIZ-1
  604.    '   GAD_RAISEBOX_CREATE[X+1,Y+1,XSIZ-2,PADDLESIZE,2] 
  605.    Ink VGREY : Bar X+2,Y+2 To X+XSIZ-2,Y+PADDLESIZE
  606.    Ink VWHITE : Polyline X+XSIZ-2,Y+1 To X+1,Y+1 To X+1,Y+PADDLESIZE
  607.    Ink VBLACK : Polyline X+XSIZ-2,Y+2 To X+XSIZ-2,Y+PADDLESIZE To X+2,Y+PADDLESIZE
  608.    
  609.    SEP=Y+(PADDLESIZE/2)
  610.    Ink VWHITE : Draw X+7,SEP To X+XSIZ-8,SEP
  611.    Ink VBLACK : Draw X+7,SEP+1 To X+XSIZ-8,SEP+1
  612.    
  613.    GADSTUFF(GADNUM,6)=Y+1
  614.    '   GAD_SLIDER_UPDATE[GADNUM,10] 
  615.    
  616. End Proc
  617. Procedure GAD_SLIDER_UPDATE[GADNUM,STP]
  618.    
  619.    OSTP=GADSTUFF(GADNUM,5)
  620.    If OSTP<>STP
  621.       
  622.       X=GADINFO(GADNUM,1)+1
  623.       X2=GADINFO(GADNUM,3)-1
  624.       Y=GADINFO(GADNUM,2)
  625.       
  626.       AREA=GADSTUFF(GADNUM,4)
  627.       NUMSTEPS=GADSTUFF(GADNUM,1)
  628.       PADSIZE=GADSTUFF(GADNUM,3)
  629.       
  630.       SPOS=Y+(AREA*STP)/(NUMSTEPS-1)
  631.       OPOS=Y+(AREA*OSTP)/(NUMSTEPS-1)
  632.       If OPOS<>SPOS
  633.          
  634.          HP=(PADSIZE/2) : SEP=OPOS+HP-1
  635.          Ink VGREY : Box X+6,SEP To X2-6,SEP+1
  636.          
  637.          If SPOS>OPOS
  638.             Ink VGREY : Bar X,OPOS+PADSIZE-2 To X2,SPOS+PADSIZE-1
  639.             Ink VBLACK,VBLUE : Set Pattern 2
  640.             Bar X,OPOS To X2,SPOS : Set Pattern 0
  641.          Else 
  642.             Ink VGREY : Bar X,SPOS To X2,OPOS+1
  643.             Ink VBLACK,VBLUE : Set Pattern 2
  644.             Bar X,SPOS+PADSIZE-1 To X2,OPOS+PADSIZE-1 : Set Pattern 0
  645.          End If 
  646.          '         GAD_RAISEBOX_CREATE[X,SPOS,X2-X+1,PADSIZE,1] 
  647.          XL=X2-X : YL=SPOS+PADSIZE-1
  648.          Ink VWHITE : Polyline X+XL,SPOS To X,SPOS To X,YL
  649.          Ink VBLACK : Polyline X+XL,SPOS+1 To X+XL,YL To X+1,YL
  650.          
  651.          SEP=SPOS+HP-1
  652.          Ink VWHITE : Draw X+6,SEP To X2-6,SEP
  653.          Ink VBLACK : Draw X+6,SEP+1 To X2-6,SEP+1
  654.          
  655.       End If 
  656.       GADSTUFF(GADNUM,5)=STP
  657.       GADSTUFF(GADNUM,6)=SPOS
  658.    End If 
  659. End Proc
  660. Procedure GAD_SLIDER_MOUSE_UPDATE[GADNUM]
  661.    
  662.    NUMSTEPS=GADSTUFF(GADNUM,1)
  663.    STP=GADSTUFF(GADNUM,5)
  664.    If NUMSTEPS>1
  665.       
  666.       X=GADINFO(GADNUM,1)+1
  667.       X2=GADINFO(GADNUM,3)-1
  668.       Y=GADINFO(GADNUM,2)
  669.       
  670.       PAGESIZE=GADSTUFF(GADNUM,2)
  671.       AREA=GADSTUFF(GADNUM,4)
  672.       PADSIZE=GADSTUFF(GADNUM,3)
  673.       
  674.       OPOS=GADSTUFF(GADNUM,6)
  675.       SPOS=Y Screen(Y Mouse)
  676.       
  677.       If SPOS<OPOS and GADRADIO(GADNUM)=0
  678.          
  679.          Add STP,1-PAGESIZE
  680.          If STP<0 : STP=0 : End If 
  681.          SPOS=Y+(AREA*STP)/(NUMSTEPS-1)
  682.          Repeat : Until Mouse Key=0
  683.          
  684.       Else If SPOS>OPOS+PADSIZE-1 and GADRADIO(GADNUM)=0
  685.          
  686.          Add STP,PAGESIZE-1
  687.          If STP>NUMSTEPS-1 : STP=NUMSTEPS-1 : End If 
  688.          SPOS=Y+(AREA*STP)/(NUMSTEPS-1)
  689.          Repeat : Until Mouse Key=0
  690.          
  691.       Else 
  692.          If GADRADIO(GADNUM)=0
  693.             GAP=SPOS-OPOS
  694.          Else 
  695.             GAP=GADRADIO(GADNUM)-1
  696.          End If 
  697.          '
  698.          Do 
  699.             SPOS=Y Screen(Y Mouse)-GAP
  700.             If SPOS>Y+AREA
  701.                SPOS=Y+AREA
  702.             Else If SPOS<Y
  703.                SPOS=Y
  704.             End If 
  705.             If SPOS<>OPOS
  706.                
  707.                GADRADIO(GADNUM)=GAP+1
  708.                STP=((SPOS-Y)*NUMSTEPS)/AREA
  709.                If STP>NUMSTEPS-1 : STP=NUMSTEPS-1 : End If 
  710.                Exit 
  711.                
  712.             Else If Mouse Key=0
  713.                If GADRADIO(GADNUM)=0
  714.                   If GAP>(PADSIZE/2)-1
  715.                      Inc STP
  716.                      If STP>(NUMSTEPS-1)
  717.                         STP=(NUMSTEPS-1)
  718.                      End If 
  719.                   Else 
  720.                      Dec STP
  721.                      If STP<0
  722.                         STP=0
  723.                      End If 
  724.                   End If 
  725.                   SPOS=Y+(AREA*STP)/(NUMSTEPS-1)
  726.                   Y Mouse=Y Hard(SPOS+GAP)
  727.                End If 
  728.                GADRADIO(GADNUM)=0
  729.                Exit 
  730.             End If 
  731.          Loop 
  732.          
  733.       End If 
  734.       
  735.       If SPOS<>OPOS
  736.          HP=(PADSIZE/2) : SEP=OPOS+HP-1
  737.          Ink VGREY : Box X+6,SEP To X2-6,SEP+1
  738.          If SPOS>OPOS
  739.             Ink VGREY : Bar X,OPOS+PADSIZE-2 To X2,SPOS+PADSIZE-1
  740.             Ink VBLACK,VBLUE : Set Pattern 2
  741.             Bar X,OPOS To X2,SPOS : Set Pattern 0
  742.          Else 
  743.             Ink VGREY : Bar X,SPOS To X2,OPOS+1
  744.             Ink VBLACK,VBLUE : Set Pattern 2
  745.             Bar X,SPOS+PADSIZE-1 To X2,OPOS+PADSIZE-1 : Set Pattern 0
  746.          End If 
  747.          '      GAD_RAISEBOX_CREATE[X,SPOS,X2-X+1,PADSIZE,1]
  748.          'XL=X2-X 
  749.          '   Ink VWHITE : Polyline X+XL,SPOS To X,SPOS To X,SPOS+PADSIZE-1
  750.          '   Ink VBLACK : Polyline X+XL,SPOS+1 To X+XL,SPOS+PADSIZE-1 To X+1,SPOS+PADSIZE-1 
  751.          
  752.          XL=X2-X : YL=SPOS+PADSIZE-1
  753.          Ink VWHITE : Polyline X+XL,SPOS To X,SPOS To X,YL
  754.          Ink VBLACK : Polyline X+XL,SPOS+1 To X+XL,YL To X+1,YL
  755.          
  756.          SEP=SPOS+HP-1
  757.          Ink VWHITE : Draw X+6,SEP To X2-6,SEP
  758.          Ink VBLACK : Draw X+6,SEP+1 To X2-6,SEP+1
  759.          
  760.       End If 
  761.       
  762.       GADSTUFF(GADNUM,5)=STP
  763.       GADSTUFF(GADNUM,6)=SPOS
  764.    End If 
  765. End Proc[STP]
  766. '  Horizontal sliders have a small issue in hires, due to the
  767. '   low res pointer. Not a bug! - too insignificant to be worth  
  768. '   fixing!  
  769. Procedure GAD_HSLIDER_CREATE[GADNUM,X,Y,XSIZ,YSIZ,NUMSTEPS,PAGESIZE]
  770.  
  771.    If NUMSTEPS<1 : NUMSTEPS=1 : PAGESIZE=1 : End If 
  772.    If PAGESIZE>NUMSTEPS : PAGESIZE=NUMSTEPS : End If 
  773.    
  774.    GADINFO(GADNUM,0)=12
  775.    GADINFO(GADNUM,1)=X+1
  776.    GADINFO(GADNUM,2)=Y
  777.    GADINFO(GADNUM,3)=X+XSIZ-2
  778.    GADINFO(GADNUM,4)=Y+YSIZ-1
  779.    '
  780.    GADSTUFF(GADNUM,1)=NUMSTEPS-PAGESIZE+1
  781.    GADSTUFF(GADNUM,2)=PAGESIZE
  782.    
  783.    GADRADIO(GADNUM)=0
  784.    
  785.    PADDLESIZE=(PAGESIZE*(XSIZ-2))/NUMSTEPS
  786.    If PADDLESIZE<6 : PADDLESIZE=6 : End If 
  787.    GADSTUFF(GADNUM,3)=PADDLESIZE
  788.    
  789.    AREA=XSIZ-2-PADDLESIZE
  790.    GADSTUFF(GADNUM,4)=AREA
  791.    '
  792.    GADSTUFF(GADNUM,5)=0
  793.    Ink VBLACK,VBLUE : Set Pattern 2
  794.    Bar X,Y To X+XSIZ-1,Y+YSIZ-1 : Set Pattern 0
  795.    
  796.    '   GAD_LOWERBOX_CREATE[X,Y,XSIZ,YSIZ,1] 
  797.    Ink VBLACK : Polyline X+XSIZ-1,Y To X,Y To X,Y+YSIZ-1
  798.    Ink VWHITE : Polyline X+XSIZ-1,Y+1 To X+XSIZ-1,Y+YSIZ-1 To X+1,Y+YSIZ-1
  799.    '   GAD_RAISEBOX_CREATE[X+1,Y+1,XSIZ-2,PADDLESIZE,2] 
  800.    Ink VGREY : Bar X+2,Y+2 To X+PADDLESIZE,Y+YSIZ-2
  801.    Ink VWHITE : Polyline X+1,Y+YSIZ-2 To X+1,Y+1 To X+PADDLESIZE,Y+1
  802.    Ink VBLACK : Polyline X+2,Y+YSIZ-2 To X+PADDLESIZE,Y+YSIZ-2 To X+PADDLESIZE,Y+2
  803.    
  804.    SEP=X+(PADDLESIZE/2)
  805.    Ink VWHITE : Draw SEP,Y+7 To SEP,Y+YSIZ-8
  806.    Ink VBLACK : Draw SEP+1,Y+7 To SEP+1,Y+YSIZ-8
  807.    
  808.    GADSTUFF(GADNUM,6)=X+1
  809.    '   GAD_SLIDER_UPDATE[GADNUM,10] 
  810.    
  811. End Proc
  812. Procedure GAD_HSLIDER_UPDATE[GADNUM,STP]
  813.    
  814.    OSTP=GADSTUFF(GADNUM,5)
  815.    If OSTP<>STP
  816.       
  817.       X=GADINFO(GADNUM,1)
  818.       Y=GADINFO(GADNUM,2)+1
  819.       Y2=GADINFO(GADNUM,4)-1
  820.       
  821.       AREA=GADSTUFF(GADNUM,4)
  822.       NUMSTEPS=GADSTUFF(GADNUM,1)
  823.       PADSIZE=GADSTUFF(GADNUM,3)
  824.       
  825.       SPOS=X+(AREA*STP)/(NUMSTEPS-1)
  826.       OPOS=X+(AREA*OSTP)/(NUMSTEPS-1)
  827.       If OPOS<>SPOS
  828.          
  829.          HP=(PADSIZE/2) : SEP=OPOS+HP-1
  830.          Ink VGREY : Box SEP,Y+6 To SEP+1,Y2-6
  831.          
  832.          If SPOS>OPOS
  833.             Ink VGREY : Bar OPOS+PADSIZE-2,Y To SPOS+PADSIZE-1,Y2
  834.             Ink VBLACK,VBLUE : Set Pattern 2
  835.             Bar OPOS,Y To SPOS,Y2 : Set Pattern 0
  836.          Else 
  837.             Ink VGREY : Bar SPOS,Y To OPOS+1,Y2
  838.             Ink VBLACK,VBLUE : Set Pattern 2
  839.             Bar SPOS+PADSIZE-1,Y To OPOS+PADSIZE-1,Y2 : Set Pattern 0
  840.          End If 
  841.          '         GAD_RAISEBOX_CREATE[X,SPOS,X2-X+1,PADSIZE,1] 
  842.          YL=Y2-Y : XL=SPOS+PADSIZE-1
  843.          Ink VWHITE : Polyline SPOS,Y+YL To SPOS,Y To XL,Y
  844.          Ink VBLACK : Polyline SPOS+1,Y+YL To XL,Y+YL To XL,Y+1
  845.          
  846.          SEP=SPOS+HP-1
  847.          Ink VWHITE : Draw SEP,Y+6 To SEP,Y2-6
  848.          Ink VBLACK : Draw SEP+1,Y+6 To SEP+1,Y2-6
  849.          
  850.       End If 
  851.       GADSTUFF(GADNUM,5)=STP
  852.       GADSTUFF(GADNUM,6)=SPOS
  853.    End If 
  854. End Proc
  855. Procedure GAD_HSLIDER_MOUSE_UPDATE[GADNUM]
  856.    
  857.    NUMSTEPS=GADSTUFF(GADNUM,1)
  858.    STP=GADSTUFF(GADNUM,5)
  859.    If NUMSTEPS>1
  860.       
  861.       X=GADINFO(GADNUM,1)
  862.       Y=GADINFO(GADNUM,2)+1
  863.       Y2=GADINFO(GADNUM,4)-1
  864.       
  865.       PAGESIZE=GADSTUFF(GADNUM,2)
  866.       AREA=GADSTUFF(GADNUM,4)
  867.       PADSIZE=GADSTUFF(GADNUM,3)
  868.       
  869.       OPOS=GADSTUFF(GADNUM,6)
  870.       SPOS=X Screen(X Mouse)
  871.       
  872.       If SPOS<OPOS and GADRADIO(GADNUM)=0
  873.          
  874.          Add STP,1-PAGESIZE
  875.          If STP<0 : STP=0 : End If 
  876.          SPOS=X+(AREA*STP)/(NUMSTEPS-1)
  877.          Repeat : Until Mouse Key=0
  878.          
  879.       Else If SPOS>OPOS+PADSIZE-1 and GADRADIO(GADNUM)=0
  880.          
  881.          Add STP,PAGESIZE-1
  882.          If STP>NUMSTEPS-1 : STP=NUMSTEPS-1 : End If 
  883.          SPOS=X+(AREA*STP)/(NUMSTEPS-1)
  884.          Repeat : Until Mouse Key=0
  885.          
  886.       Else 
  887.          If GADRADIO(GADNUM)=0
  888.             GAP=SPOS-OPOS
  889.          Else 
  890.             GAP=GADRADIO(GADNUM)-1
  891.          End If 
  892.          '
  893.          Do 
  894.             SPOS=X Screen(X Mouse)-GAP
  895.             If SPOS>X+AREA
  896.                SPOS=X+AREA
  897.             Else If SPOS<X
  898.                SPOS=X
  899.             End If 
  900.             If SPOS<>OPOS
  901.                
  902.                GADRADIO(GADNUM)=GAP+1
  903.                STP=((SPOS-X)*NUMSTEPS)/AREA
  904.                If STP>NUMSTEPS-1 : STP=NUMSTEPS-1 : End If 
  905.                Exit 
  906.                
  907.             Else If Mouse Key=0
  908.                If GADRADIO(GADNUM)=0
  909.                   If GAP>(PADSIZE/2)-1
  910.                      Inc STP
  911.                      If STP>(NUMSTEPS-1)
  912.                         STP=(NUMSTEPS-1)
  913.                      End If 
  914.                   Else 
  915.                      Dec STP
  916.                      If STP<0
  917.                         STP=0
  918.                      End If 
  919.                   End If 
  920.                   SPOS=X+(AREA*STP)/(NUMSTEPS-1)
  921.                   X Mouse=X Hard(SPOS+GAP)
  922.                End If 
  923.                GADRADIO(GADNUM)=0
  924.                Exit 
  925.             End If 
  926.          Loop 
  927.          
  928.       End If 
  929.  
  930.       If OPOS<>SPOS
  931.          
  932.          HP=(PADSIZE/2) : SEP=OPOS+HP-1
  933.          Ink VGREY : Box SEP,Y+6 To SEP+1,Y2-6
  934.          
  935.          If SPOS>OPOS
  936.             Ink VGREY : Bar OPOS+PADSIZE-2,Y To SPOS+PADSIZE-1,Y2
  937.             Ink VBLACK,VBLUE : Set Pattern 2
  938.             Bar OPOS,Y To SPOS,Y2 : Set Pattern 0
  939.          Else 
  940.             Ink VGREY : Bar SPOS,Y To OPOS+1,Y2
  941.             Ink VBLACK,VBLUE : Set Pattern 2
  942.             Bar SPOS+PADSIZE-1,Y To OPOS+PADSIZE-1,Y2 : Set Pattern 0
  943.          End If 
  944.          '         GAD_RAISEBOX_CREATE[X,SPOS,X2-X+1,PADSIZE,1] 
  945.          YL=Y2-Y : XL=SPOS+PADSIZE-1
  946.          Ink VWHITE : Polyline SPOS,Y+YL To SPOS,Y To XL,Y
  947.          Ink VBLACK : Polyline SPOS+1,Y+YL To XL,Y+YL To XL,Y+1
  948.          
  949.          SEP=SPOS+HP-1
  950.          Ink VWHITE : Draw SEP,Y+6 To SEP,Y2-6
  951.          Ink VBLACK : Draw SEP+1,Y+6 To SEP+1,Y2-6
  952.          
  953.       End If 
  954. '      If SPOS<>OPOS 
  955. '         HP=(PADSIZE/2) : SEP=OPOS+HP-1 
  956. '         Ink VGREY : Box X+6,SEP To X2-6,SEP+1
  957. '         If SPOS>OPOS 
  958. '            Ink VGREY : Bar X,OPOS+PADSIZE-2 To X2,SPOS+PADSIZE-1 
  959. '            Ink VBLACK,VBLUE : Set Pattern 2
  960. '            Bar X,OPOS To X2,SPOS : Set Pattern 0 
  961. '         Else 
  962. '            Ink VGREY : Bar X,SPOS To X2,OPOS+1 
  963. '            Ink VBLACK,VBLUE : Set Pattern 2
  964. '            Bar X,SPOS+PADSIZE-1 To X2,OPOS+PADSIZE-1 : Set Pattern 0 
  965. '         End If 
  966. '         '      GAD_RAISEBOX_CREATE[X,SPOS,X2-X+1,PADSIZE,1]
  967. '         'XL=X2-X 
  968. '         '   Ink VWHITE : Polyline X+XL,SPOS To X,SPOS To X,SPOS+PADSIZE-1
  969. '         '   Ink VBLACK : Polyline X+XL,SPOS+1 To X+XL,SPOS+PADSIZE-1 To X+1,SPOS+PADSIZE-1 
  970. '          
  971. '         XL=X2-X : YL=SPOS+PADSIZE-1
  972. '         Ink VWHITE : Polyline X+XL,SPOS To X,SPOS To X,YL
  973. '         Ink VBLACK : Polyline X+XL,SPOS+1 To X+XL,YL To X+1,YL 
  974. '          
  975. '         SEP=SPOS+HP-1
  976. '         Ink VWHITE : Draw X+6,SEP To X2-6,SEP
  977. '         Ink VBLACK : Draw X+6,SEP+1 To X2-6,SEP+1
  978. '          
  979. '      End If  
  980.       
  981.       GADSTUFF(GADNUM,5)=STP
  982.       GADSTUFF(GADNUM,6)=SPOS
  983.    End If 
  984. End Proc[STP]
  985. '
  986. Procedure GAD_SCROLLBUT_CREATE[GADNUM,X,Y]
  987.    '
  988.    GADINFO(GADNUM,0)=34
  989.    GADINFO(GADNUM,1)=X
  990.    GADINFO(GADNUM,2)=Y
  991.    GADINFO(GADNUM,3)=X+34
  992.    GADINFO(GADNUM,4)=Y+12
  993.    '
  994.    GAD_RAISEBOX_CREATE[X,Y,15,12,4]
  995.    GAD_RAISEBOX_CREATE[X+17,Y,15,12,4]
  996.    '
  997.    Ink VBLACK
  998.    Text X+4,Y+9,"<"
  999.    Text X+21,Y+9,">"
  1000.    '
  1001. End Proc
  1002. Procedure GAD_SCROLLBUT_UPDATE[GADNUM]
  1003.    '
  1004.    X=GADINFO(GADNUM,1)
  1005.    Y=GADINFO(GADNUM,2)
  1006.    '
  1007.    If GADSTUFF(GADNUM,0)<>1
  1008.       If X Screen(X Mouse)<X+15
  1009.          If GADSTUFF(GADNUM,0)=2
  1010.             GAD_SCROLLBUT_OUT[GADNUM,2]
  1011.          End If 
  1012.          GAD_LOWERBOX_CREATE[X,Y,15,12,4]
  1013.          Ink VWHITE,VBLUE
  1014.          Text X+4,Y+9,"<"
  1015.          GADSTUFF(GADNUM,0)=1
  1016.       End If 
  1017.       Inc GADSTUFF(GADNUM,1)
  1018.    End If 
  1019.    If GADSTUFF(GADNUM,0)<>2
  1020.       If X Screen(X Mouse)=>X+15
  1021.          If GADSTUFF(GADNUM,0)=1
  1022.             GAD_SCROLLBUT_OUT[GADNUM,1]
  1023.          End If 
  1024.          GAD_LOWERBOX_CREATE[X+17,Y,15,12,4]
  1025.          Ink VWHITE,VBLUE
  1026.          Text X+21,Y+9,">"
  1027.          GADSTUFF(GADNUM,0)=2
  1028.       End If 
  1029.       Dec GADSTUFF(GADNUM,1)
  1030.    End If 
  1031.    '
  1032.    '
  1033.    FIN:
  1034. End Proc[GADSTUFF(GADNUM,1)]
  1035. Procedure GAD_SCROLLOFF[GADNUM]
  1036.    GAD_SCROLLBUT_OUT[GADNUM,GADSTUFF(GADNUM,0)]
  1037.    GADSTUFF(GADNUM,0)=0
  1038. End Proc
  1039. Procedure GAD_SCROLLBUT_OUT[GADNUM,BUTTON]
  1040.    '
  1041.    X=GADINFO(GADNUM,1)
  1042.    Y=GADINFO(GADNUM,2)
  1043.    If BUTTON=1
  1044.       GAD_RAISEBOX_CREATE[X,Y,15,12,4]
  1045.       Ink VBLACK
  1046.       Text X+4,Y+9,"<"
  1047.    Else If BUTTON=2
  1048.       GAD_RAISEBOX_CREATE[X+17,Y,15,12,4]
  1049.       Ink VBLACK
  1050.       Text X+21,Y+9,">"
  1051.    End If 
  1052. End Proc
  1053. Procedure GAD_SCROLLBUT_SET[GADNUM,SVALUE]
  1054.    GADSTUFF(GADNUM,1)=SVALUE
  1055. End Proc[SVALUE]
  1056. '
  1057. ' Custom-shaped buttons. 
  1058. Procedure GAD_SBUT_CREATE[GADNUM,X,Y,WIDTH,HEIGHT,STYLE]
  1059.    '
  1060.    If STYLE>2 Then Dec WIDTH
  1061.    '
  1062.    GADINFO(GADNUM,0)=20
  1063.    GADINFO(GADNUM,1)=X
  1064.    GADINFO(GADNUM,2)=Y
  1065.    GADINFO(GADNUM,3)=X+WIDTH
  1066.    GADINFO(GADNUM,4)=Y+HEIGHT
  1067.    GADSTUFF(GADNUM,1)=STYLE
  1068.    '
  1069.    GAD_RAISEBOX_CREATE[X,Y,WIDTH,HEIGHT,STYLE]
  1070.    '
  1071. End Proc
  1072. Procedure GAD_SBUT_IN[GADNUM]
  1073.    '
  1074.    X=GADINFO(GADNUM,1)
  1075.    Y=GADINFO(GADNUM,2)
  1076.    WIDTH=GADINFO(GADNUM,3)-X
  1077.    HEIGHT=GADINFO(GADNUM,4)-Y
  1078.    STYLE=GADSTUFF(GADNUM,1)
  1079.    '
  1080.    GAD_LOWERBOX_CREATE[X,Y,WIDTH,HEIGHT,STYLE]
  1081.    '
  1082. End Proc
  1083. Procedure GAD_SBUT_OUT[GADNUM]
  1084.    '
  1085.    X=GADINFO(GADNUM,1)
  1086.    Y=GADINFO(GADNUM,2)
  1087.    WIDTH=GADINFO(GADNUM,3)-X
  1088.    HEIGHT=GADINFO(GADNUM,4)-Y
  1089.    STYLE=GADSTUFF(GADNUM,1)
  1090.    '
  1091.    GAD_RAISEBOX_CREATE[X,Y,WIDTH,HEIGHT,STYLE]
  1092.    '
  1093. End Proc
  1094. '
  1095. Procedure GAD_WINDOW_CREATE[X,Y,WIDTH,HEIGHT,TITLE$,STATE,PATTERN]
  1096.    '
  1097.    '
  1098.    Set Pattern PATTERN : Bar X,Y To X+WIDTH,Y+HEIGHT : Set Pattern 0
  1099.    '
  1100.    TITLE$=Left$(TITLE$,(WIDTH/8)-1)
  1101.    If STATE=1 Then Ink VBLUE : Bar X,Y To X+WIDTH,Y+10
  1102.    If STATE=1 Then Ink VBLACK,VBLUE Else Ink VBLACK,VGREY
  1103.    Text X+4,Y+8,TITLE$
  1104.    Ink VBLACK
  1105.    Draw X+WIDTH,Y+HEIGHT To X+WIDTH,Y
  1106.    Draw X+WIDTH,Y+HEIGHT To X,Y+HEIGHT
  1107.    Ink VWHITE
  1108.    Draw X,Y To X+WIDTH,Y
  1109.    Draw X,Y To X,Y+HEIGHT
  1110.    Ink VBLACK
  1111.    Draw X+1,Y+10 To X+WIDTH,Y+10
  1112.    If STATE=1 Then Ink VBLUE Else Ink VGREY
  1113.    Draw X+1,Y+11 To X+1,Y+HEIGHT-1
  1114.    Draw X+2,Y+11 To X+2,Y+HEIGHT-1
  1115.    Ink VBLACK
  1116.    Draw X+3,Y+11 To X+3,Y+HEIGHT-1
  1117.    Ink VWHITE
  1118.    Draw X+4,Y+HEIGHT-1 To X+WIDTH-1,Y+HEIGHT-1
  1119.    If STATE=1 Then Ink VBLUE Else Ink VGREY
  1120.    Draw X+WIDTH-1,Y+11 To X+WIDTH-1,Y+HEIGHT-1
  1121.    Draw X+WIDTH-2,Y+11 To X+WIDTH-2,Y+HEIGHT-1
  1122.    Ink VWHITE,VGREY
  1123.    Draw X+WIDTH-3,Y+11 To X+WIDTH-3,Y+HEIGHT-1
  1124. End Proc
  1125. '
  1126. ' The below two procedures (Request and File selector) are independent 
  1127. '  of your gadget code, and will replace any graphics they overwrite 
  1128. '  after being called. 
  1129. '
  1130. Procedure GAD_FILE_SELECTOR[X,Y,WIDTH,TITLE$]
  1131.    '
  1132.    WIDTH=WIDTH*8 : FILETEMP=0 : GADCOUNTTEMP=GADCOUNT : GADCOUNT=10
  1133.    '
  1134.    LEFT=((WIDTH/16)*16)+16
  1135.    Get Block 11000,X,Y,LEFT,135,0
  1136.    For N=1 To 10
  1137.       GAD_STORE[N]
  1138.    Next N
  1139.    '
  1140.    '
  1141.    Ink VBLACK : Draw X,Y To X+WIDTH+3,Y : Draw X,Y To X,Y+134 : Draw X+1,Y To X+1,Y+134 : Add X,2 : Inc Y
  1142.    '
  1143.    GAD_RAISEBOX_CREATE[X,Y,WIDTH,12,4]
  1144.    LTEKST=Len(TITLE$)*8 : If(LTEKST/8)>(WIDTH/8)-1 Then LTEKST=WIDTH-8
  1145.    Ink VBLACK,VGREY : Text((WIDTH-LTEKST)/2)+X,Y+9,Left$(TITLE$,(WIDTH/8)-1)
  1146.    GAD_RAISEBOX_CREATE[X,Y+13,WIDTH,120,4]
  1147.    GAD_LOWERBOX_CREATE[X+10,Y+18,WIDTH-117,110,4]
  1148.    GAD_SLIDER_CREATE[1,X+WIDTH-103,Y+18,20,111,0,10]
  1149. '   GAD_VSLIDEBUT_CREATE[2,1]
  1150.    '
  1151.    GAD_BUTTON_CREATE[3,X+WIDTH-77,Y+18,11," PARENT "]
  1152.    GAD_BUTTON_CREATE[4,X+WIDTH-77,Y+31,11,"  DEVS  "]
  1153.    GAD_BUTTON_CREATE[5,X+WIDTH-77,Y+104,11,"   OK   "]
  1154.    GAD_BUTTON_CREATE[6,X+WIDTH-77,Y+117,11," CANCEL "]
  1155.    GAD_CHECKBOX_CREATE[10,X+WIDTH-77,Y+65] : GAD_CHECKBOX_TICK[10]
  1156.    Ink VBLACK : Text X+WIDTH-48,Y+73,"SIZES"
  1157.    '
  1158.    GAD_TEXT_CREATE[7,X+12,Y+19,(WIDTH/8)-16,Dir$,0]
  1159.    GAD_TEXT_CREATE[8,X+12,Y+115,(WIDTH/8)-16,"",0]
  1160.    '
  1161.    GADINFO(9,1)=X+12 : GADINFO(9,2)=Y+33
  1162.    GADINFO(9,3)=X+WIDTH-109 : GADINFO(9,4)=Y+112
  1163.    '
  1164.    DPOS=0 : SIZE=1 : SELECTED=-1
  1165.    If FILELIST$(0)="" Then Gosub FINDDEVS Else Gosub RETRIEVEDIR
  1166.    '
  1167.    '
  1168.    Do 
  1169.       GADSCAN : BUTTON=Param
  1170.       If BUTTON=1 Then Repeat : Wait Vbl : GAD_SLIDER_MOUSE_UPDATE[1] : DPOS=Param : Gosub DISPDIR : Until Mouse Key=0
  1171. '      If BUTTON=2 Then Repeat : GAD_VSLIDEBUT_UPDATE[2] : DPOS=Param : Gosub DISPDIR : Until Mouse Key=0 : GAD_SLIDEOFF[2]
  1172.       If BUTTON=3 Then Parent : Gosub FINDDIR
  1173.       If BUTTON=4 or Mouse Key=2 : Repeat : Until Mouse Key=0 : Gosub FINDDEVS : BUTTON=0 : End If 
  1174.       If BUTTON=9 Then Gosub SELECTFILE
  1175.       If BUTTON=7 Then GAD_TEXT_INPUT[7] : TEMP$=Param$ : If Exist(TEMP$) Then Dir$=TEMP$ : Gosub FINDDIR : Else GAD_TEXT_SET[7,Dir$,0,0]
  1176.       If BUTTON=8 Then GAD_TEXT_INPUT[8] : TEMP$=Param$ : If TEMP$<>"" Then Goto LFILE
  1177.       If BUTTON=5 Then TEMP$=GADTEXT$(8) : Gosub STRIPTEMP : Goto LFILE
  1178.       If BUTTON=6 Then OUT$="" : Goto QUITIT
  1179.       If BUTTON=10 Then GAD_CHECKBOX_TICK[10] : SIZE=Param : Gosub DISPDIR
  1180.       If FILETEMP=1 Then Goto LFILE
  1181.       If X Screen(X Mouse)>X+12 and Y Screen(Y Mouse)>Y+33 and X Screen(X Mouse)<X+WIDTH-109 and Y Screen(Y Mouse)<Y+113
  1182.          SELECTED=((Y Screen(Y Mouse)-(Y+33))/8)+DPOS
  1183.       Else SELECTED=-1
  1184.       End If 
  1185.       Gosub DISPDIR
  1186.    Loop 
  1187.    '
  1188.    '
  1189.    FINDDEVS:
  1190.    For N=0 To 300
  1191.       FILELIST$(N)=""
  1192.    Next N
  1193.    N=0 : F=0 : DPOS=0
  1194.    Restore DEVDATA
  1195.    While F<17
  1196.       Read DE$
  1197.       If Exist(Right$(DE$,Len(DE$)-1))
  1198.          FILELIST$(N)=DE$+Space$(((WIDTH/8)-15)-Len(DE$))
  1199.          Inc N
  1200.       End If 
  1201.       Inc F
  1202.    Wend 
  1203.    GAD_SLIDER_CREATE[1,X+WIDTH-103,Y+18,20,111,N,10] : N=0
  1204.    Ink VBLUE
  1205.    Bar X+12,Y+33 To X+WIDTH-109,Y+113
  1206.    Gosub DISPDIR
  1207.    Return 
  1208.    '
  1209.    '
  1210.    DEVDATA:
  1211.    Data "#DF0:","#DF1:","#DF2:","#DF3:","#HD0:","#DH0:","#HD1:","#DH1:","#HD2:","#DH2:"
  1212.    Data "#PC0:","#PC1:","#DS0:","#DS1:","#CD0:","#CD1:","#RAM:"
  1213.    '
  1214.    '
  1215.    DISPDIR:
  1216.    YT=Y+40
  1217.    Ink VBLACK,VBLUE
  1218.    For N=DPOS To DPOS+9
  1219.       Exit If FILELIST$(N)=""
  1220.       '
  1221.       If Left$(FILELIST$(N),1)="*" or Left$(FILELIST$(N),1)="#"
  1222.          If N=SELECTED
  1223.             Ink VBLUE,VWHITE
  1224.          Else 
  1225.             Ink VWHITE,VBLUE
  1226.          End If 
  1227.          TEMP$=Right$(FILELIST$(N),Len(FILELIST$(N))-1)
  1228.          Text X+13,YT,Left$(TEMP$,(WIDTH/8)-17)
  1229.       Else 
  1230.          If N=SELECTED
  1231.             Ink VBLACK,VWHITE
  1232.          Else 
  1233.             Ink VBLACK,VBLUE
  1234.          End If 
  1235.          TEMP$=Right$(FILELIST$(N),Len(FILELIST$(N))-1)
  1236.          If SIZE=1
  1237.             Text X+13,YT,Left$(TEMP$,(WIDTH/8)-24)+Mid$(TEMP$,Len(TEMP$)-8,7)
  1238.          Else 
  1239.             Text X+13,YT,Left$(TEMP$,(WIDTH/8)-17)
  1240.          End If 
  1241.          '
  1242.       End If 
  1243.       '
  1244.       Add YT,8
  1245.    Next N
  1246.    YT=0
  1247.    Return 
  1248.    '
  1249.    '
  1250.    FINDDIR:
  1251.    For N=0 To 300
  1252.       FILELIST$(N)=""
  1253.    Next N
  1254.    N=0 : DPOS=0 : FILEDIR$=Dir$
  1255.    DI$=Dir First$(Dir$)
  1256.    FILELIST$(0)=DI$
  1257.    While FILELIST$(N)<>""
  1258.       Inc N
  1259.       Exit If N>300
  1260.       DI$=Dir Next$
  1261.       FILELIST$(N)=DI$
  1262.    Wend 
  1263.    GAD_SLIDER_CREATE[1,X+WIDTH-103,Y+18,20,111,N,10] : N=0
  1264.    GAD_TEXT_SET[7,Dir$,0,0]
  1265.    Ink VBLUE
  1266.    Bar X+12,Y+33 To X+WIDTH-109,Y+113
  1267.    Gosub DISPDIR
  1268.    Return 
  1269.    '
  1270.    '
  1271.    SELECTFILE:
  1272.    NUM=(Y Screen(Y Mouse)-(Y+33))/8
  1273.    TEMP$=FILELIST$(DPOS+NUM)
  1274.    If TEMP$="" Then Return 
  1275.    If Left$(TEMP$,1)=" "
  1276.       TEMP$=Right$(TEMP$,Len(TEMP$)-1)
  1277.       TEMP$=Left$(TEMP$,Len(TEMP$)-9) : Gosub STRIPTEMP
  1278.       If GADTEXT$(8)=TEMP$ : FILETEMP=1 : Return : End If 
  1279.       GAD_TEXT_SET[8,TEMP$,0,0]
  1280.    Else 
  1281.       FLAG$=Left$(TEMP$,1)
  1282.       TEMP$=Right$(TEMP$,Len(TEMP$)-1)
  1283.       While Mid$(TEMP$,Len(TEMP$),1)=" "
  1284.          TEMP$=Left$(TEMP$,Len(TEMP$)-1)
  1285.       Wend 
  1286.       '
  1287.       If Exist(TEMP$)
  1288.          If FLAG$="*"
  1289.             Dir$=Dir$+TEMP$
  1290.          Else 
  1291.             Dir$=TEMP$
  1292.          End If 
  1293.          '
  1294.          Gosub FINDDIR
  1295.       End If 
  1296.    End If 
  1297.    '
  1298.    Repeat : Until Mouse Key=0
  1299.    Return 
  1300.    '
  1301.    '
  1302.    STRIPTEMP:
  1303.    While Mid$(TEMP$,Len(TEMP$),1)=" "
  1304.       TEMP$=Left$(TEMP$,Len(TEMP$)-1)
  1305.    Wend 
  1306.    Return 
  1307.    '
  1308.    '
  1309.    RETRIEVEDIR:
  1310.    N=0 : DPOS=0
  1311.    If Dir$=FILEDIR$
  1312.       While FILELIST$(N)<>""
  1313.          Inc N
  1314.          Exit If N>300
  1315.       Wend 
  1316.       GAD_SLIDER_CREATE[1,X+WIDTH-103,Y+18,20,111,N,10] : N=0
  1317.       GAD_TEXT_SET[7,Dir$,0,0]
  1318.       Ink VBLUE
  1319.       Bar X+12,Y+33 To X+WIDTH-109,Y+113
  1320.       Gosub DISPDIR
  1321.    Else 
  1322.       Gosub FINDDIR
  1323.    End If 
  1324.    Return 
  1325.    '
  1326.    '
  1327.    LFILE:
  1328.    OUT$=Dir$+TEMP$
  1329.    QUITIT:
  1330.    '
  1331.    For N=1 To 10
  1332.       GADINFO(N,0)=0 : GADINFO(N,1)=0
  1333.       GADINFO(N,2)=0 : GADINFO(N,3)=0 : GADINFO(N,4)=0
  1334.    Next N
  1335.    '
  1336.    Put Block 11000
  1337.    For N=1 To 10
  1338.       GAD_RECALL[N]
  1339.    Next N
  1340.    GADCOUNT=GADCOUNTTEMP
  1341. End Proc[OUT$]
  1342. Procedure GAD_REQUEST[X,Y,TITLE$,MESSAGE$,MESSAGE2$,MESSAGE3$,BUTTON1$,BUTTON2$]
  1343.    '
  1344.    GADCOUNTTEMP=GADCOUNT : GADCOUNT=2
  1345.    '
  1346.    GAD_STORE[1] : GAD_STORE[2]
  1347.    '
  1348.    '
  1349.    XS=Len(TITLE$)
  1350.    If Len(MESSAGE$)>XS Then XS=Len(MESSAGE$)
  1351.    If Len(MESSAGE2$)>XS Then XS=Len(MESSAGE2$)
  1352.    If Len(MESSAGE3$)>XS Then XS=Len(MESSAGE3$)
  1353.    XSIZ=(XS*8)+28
  1354.    '
  1355.    If XSIZ<(Len(BUTTON1$)*8)+(Len(BUTTON2$)*8)+25 Then XSIZ=(Len(BUTTON1$)*8)+(Len(BUTTON2$)*8)+27
  1356.    '
  1357.    LEFT=((XSIZ/16)*16)+16
  1358.    Get Block 11000,X,Y,LEFT,59
  1359.    Ink VBLACK : Draw X,Y To X+XSIZ+2,Y : Draw X,Y To X,Y+57 : Inc X : Inc Y
  1360.    GAD_RAISEBOX_CREATE[X,Y,XSIZ,57,4]
  1361.    GAD_LOWERBOX_CREATE[X+5,Y+10,XSIZ-10,31,4]
  1362.    If BUTTON1$<>"" Then GAD_BUTTON_CREATE[1,X+5,Y+43,12,BUTTON1$]
  1363.    If BUTTON2$<>"" Then GAD_BUTTON_CREATE[2,X+XSIZ-(Len(BUTTON2$)*8)-11,Y+43,12,BUTTON2$]
  1364.    '
  1365.    Ink VBLACK,VGREY
  1366.    '
  1367.    LTEKST=Len(TITLE$)*8
  1368.    XS=(XSIZ-LTEKST)/2
  1369.    Text X+1+XS,Y+8,TITLE$
  1370.    '
  1371.    Ink VWHITE,VBLUE
  1372.    '
  1373.    LTEKST=Len(MESSAGE$)*8
  1374.    XS=(XSIZ-LTEKST)/2
  1375.    Text X+1+XS,Y+20,MESSAGE$
  1376.    '
  1377.    LTEKST=Len(MESSAGE2$)*8
  1378.    XS=(XSIZ-LTEKST)/2
  1379.    Text X+1+XS,Y+28,MESSAGE2$
  1380.    '
  1381.    LTEKST=Len(MESSAGE3$)*8
  1382.    XS=(XSIZ-LTEKST)/2
  1383.    Text X+1+XS,Y+36,MESSAGE3$
  1384.    '
  1385.    Do 
  1386.       Proc GADSCAN : BUT=Param
  1387.       If BUT=1 Then BUTTON=1 : Exit 
  1388.       If BUT=2 Then BUTTON=2 : Exit 
  1389.    Loop 
  1390.    '
  1391.    Put Block 11000
  1392.    GAD_RECALL[1] : GAD_RECALL[2]
  1393.    '
  1394.    GADCOUNT=GADCOUNTTEMP
  1395. End Proc[BUTTON]
  1396. '
  1397. Procedure GAD_RADIOBUT_CREATE[GADNUM,X,Y,GROUPNUM]
  1398.    '
  1399.    If GROUPNUM=0 Then Bell 10 : End : Rem ** NO GROUPNUM 0 ! **    
  1400.    '
  1401.    '
  1402.    GADINFO(GADNUM,0)=32
  1403.    GADINFO(GADNUM,1)=X
  1404.    GADINFO(GADNUM,2)=Y
  1405.    GADINFO(GADNUM,3)=X+18
  1406.    GADINFO(GADNUM,4)=Y+8
  1407.    GADSTUFF(GADNUM,1)=GROUPNUM
  1408.    If GADRADIO(GROUPNUM)>0
  1409.       GADRADIO(0)=1 : GAD_RADIOBUT_PUSH[GADNUM] : GADRADIO(0)=0
  1410.    Else 
  1411.       GAD_RADIOBUT_IN[GADNUM]
  1412.       GADRADIO(GROUPNUM)=GADNUM
  1413.    End If 
  1414.    '
  1415. End Proc
  1416. Procedure GAD_RADIOBUT_IN[GADNUM]
  1417.    '
  1418.    '
  1419.    X=GADINFO(GADNUM,1)
  1420.    Y=GADINFO(GADNUM,2)
  1421.    '
  1422.    Ink VBLACK
  1423.    Draw X+3,Y To X+15,Y
  1424.    Draw X+2,Y+1 To X+3,Y+1
  1425.    Draw X+1,Y+2 To X+1,Y+6
  1426.    Draw X+2,Y+2 To X+2,Y+6
  1427.    Draw X+2,Y+7 To X+3,Y+7
  1428.    Ink VWHITE
  1429.    Draw X+3,Y+8 To X+15,Y+8
  1430.    Draw X+15,Y+7 To X+16,Y+7
  1431.    Draw X+16,Y+2 To X+16,Y+6
  1432.    Draw X+17,Y+2 To X+17,Y+6
  1433.    Draw X+15,Y+1 To X+16,Y+1
  1434.    Ink VBLUE
  1435.    Bar X+7,Y+2 To X+11,Y+6
  1436.    Draw X+6,Y+2 To X+6,Y+6
  1437.    Draw X+5,Y+3 To X+5,Y+5
  1438.    Draw X+12,Y+2 To X+12,Y+6
  1439.    Draw X+13,Y+3 To X+13,Y+5
  1440.    '
  1441. End Proc
  1442. Procedure GAD_RADIOBUT_OUT[GADNUM]
  1443.    '
  1444.    '
  1445.    X=GADINFO(GADNUM,1)
  1446.    Y=GADINFO(GADNUM,2)
  1447.    '
  1448.    Ink VWHITE
  1449.    Draw X+3,Y To X+15,Y
  1450.    Draw X+2,Y+1 To X+3,Y+1
  1451.    Draw X+1,Y+2 To X+1,Y+6
  1452.    Draw X+2,Y+2 To X+2,Y+6
  1453.    Draw X+2,Y+7 To X+3,Y+7
  1454.    Ink VBLACK
  1455.    Draw X+3,Y+8 To X+15,Y+8
  1456.    Draw X+15,Y+7 To X+16,Y+7
  1457.    Draw X+16,Y+2 To X+16,Y+6
  1458.    Draw X+17,Y+2 To X+17,Y+6
  1459.    Draw X+15,Y+1 To X+16,Y+1
  1460.    Ink VGREY
  1461.    Bar X+7,Y+2 To X+11,Y+6
  1462.    Draw X+6,Y+2 To X+6,Y+6
  1463.    Draw X+5,Y+3 To X+5,Y+5
  1464.    Draw X+12,Y+2 To X+12,Y+6
  1465.    Draw X+13,Y+3 To X+13,Y+5
  1466.    '
  1467. End Proc
  1468. Procedure GAD_RADIOBUT_PUSH[GADNUM]
  1469.    GROUPNUM=GADSTUFF(GADNUM,1)
  1470.    PUSHED=GADRADIO(GROUPNUM)
  1471.    '
  1472.    GAD_RADIOBUT_IN[GADNUM]
  1473.    GADRADIO(GROUPNUM)=GADNUM
  1474.    If GADNUM<>PUSHED
  1475.       GAD_RADIOBUT_OUT[PUSHED]
  1476.    End If 
  1477.    '
  1478.    If GADRADIO(0)=0 Then Repeat : Until Mouse Key=0
  1479. End Proc
  1480. '
  1481. Procedure GAD_INFOBOX_OPEN[Y,MESSAGE$,MESSAGE2$,MESSAGE3$]
  1482.    '
  1483.    '
  1484.    YSIZ=31
  1485.    If MESSAGE3$="" Then Add YSIZ,-8
  1486.    If MESSAGE2$="" Then Add YSIZ,-8
  1487.    '
  1488.    XS=Len(MESSAGE$)
  1489.    If Len(MESSAGE2$)>XS Then XS=Len(MESSAGE2$)
  1490.    If Len(MESSAGE3$)>XS Then XS=Len(MESSAGE3$)
  1491.    XSIZ=(XS*8)+28
  1492.    X=320-(XSIZ/2)
  1493.    '
  1494.    LEFT=((XSIZ/16)*16)+16
  1495.    Get Block 11000,X,Y,LEFT,YSIZ+2
  1496.    Ink VBLACK : Draw X,Y To X+XSIZ+2,Y : Draw X,Y To X,Y+YSIZ+1 : Inc X : Inc Y
  1497.    GAD_RAISEBOX_CREATE[X,Y,XSIZ,YSIZ,4]
  1498.    '
  1499.    Ink VBLACK,VGREY
  1500.    '
  1501.    LTEKST=Len(MESSAGE$)*8
  1502.    XS=(XSIZ-LTEKST)/2
  1503.    Text X+1+XS,Y+10,MESSAGE$
  1504.    '
  1505.    LTEKST=Len(MESSAGE2$)*8
  1506.    XS=(XSIZ-LTEKST)/2
  1507.    Text X+1+XS,Y+18,MESSAGE2$
  1508.    '
  1509.    LTEKST=Len(MESSAGE3$)*8
  1510.    XS=(XSIZ-LTEKST)/2
  1511.    Text X+1+XS,Y+26,MESSAGE3$
  1512.    '
  1513. End Proc
  1514. Procedure GAD_INFOBOX_CLOSE
  1515.    Put Block 11000
  1516. End Proc
  1517. '
  1518. ' These require GADSTORE() and STORETEXT$(), and can store 10 gads as default  
  1519. Procedure GAD_STORE[GADNUM]
  1520.    For N=0 To 4
  1521.       GADSTORE(GADNUM,N)=GADINFO(GADNUM,N)
  1522.       GADINFO(GADNUM,N)=0
  1523.    Next N
  1524.    '
  1525.    For N=0 To 6
  1526.       GADSTORE(GADNUM,N+5)=GADSTUFF(GADNUM,N)
  1527.       GADSTUFF(GADNUM,N)=0
  1528.    Next N
  1529.    '
  1530.    GADSTORE(GADNUM,11)=GADRADIO(GADNUM)
  1531.    STORETEXT$(GADNUM)=GADTEXT$(GADNUM)
  1532.    GADRADIO(GADNUM)=0
  1533.    GADTEXT$(GADNUM)=""
  1534.    '
  1535. End Proc
  1536. Procedure GAD_RECALL[GADNUM]
  1537.    For N=0 To 4
  1538.       GADINFO(GADNUM,N)=GADSTORE(GADNUM,N)
  1539.       GADSTORE(GADNUM,N)=0
  1540.    Next N
  1541.    '
  1542.    For N=0 To 6
  1543.       GADSTUFF(GADNUM,N)=GADSTORE(GADNUM,N+5)
  1544.       GADSTORE(GADNUM,N+5)=0
  1545.    Next N
  1546.    '
  1547.    GADRADIO(GADNUM)=GADSTORE(GADNUM,11)
  1548.    GADTEXT$(GADNUM)=STORETEXT$(GADNUM)
  1549.    GADSTORE(GADNUM,11)=0
  1550.    STORETEXT$(GADNUM)=""
  1551. End Proc
  1552. '
  1553. Procedure GAD_DELETE[GADNUM]
  1554.    X1=GADINFO(GADNUM,1) : Y1=GADINFO(GADNUM,2) : X2=GADINFO(GADNUM,3) : Y2=GADINFO(GADNUM,4)
  1555.    Ink VGREY : Bar X1,Y1 To X2,Y2
  1556.    GADTEXT$(GADNUM)=""
  1557.    For N=0 To 4
  1558.       GADINFO(GADNUM,N)=0
  1559.    Next N
  1560.    For N=0 To 6
  1561.       GADSTUFF(GADNUM,N)=0
  1562.    Next N
  1563. End Proc
  1564. '
  1565. ' Gad Delete completely eradicates a gadget and zeroes all data it uses.